package com.demo.java.OD1_50.OD22;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【滑动窗口最大和】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145526574
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            Scanner s = new Scanner(System.in);
            int count = Integer.parseInt(s.nextLine());  // 数组长度
            String[] line = s.nextLine().split(" ");  // 数组元素
            int windowsValue = Integer.parseInt(s.nextLine());  // 滑动窗口的大小
            int[] array = new int[count];

            // 将数组元素转换为整数并存储
            for (int j = 0; j < count; ++j) {
                array[j] = Integer.parseInt(line[j]);
            }

            int left = 0;  // 窗口左边界
            int right = 0;  // 窗口右边界
            int sum = 0;  // 当前窗口内的和
            int maxValue = 0;  // 记录最大和

            // 使用滑动窗口算法
            while (right < count) {
                sum += array[right];  // 将当前元素加入窗口
                if (right - left + 1 < windowsValue) {  // 如果窗口未达到指定大小
                    right++;  // 向右滑动窗口
                } else {
                    maxValue = Math.max(maxValue, sum);  // 更新最大窗口和
                    sum -= array[left];  // 将窗口左边的元素移出
                    left++;  // 向右移动左边界
                    right++;  // 向右移动右边界
                }
            }

            // 输出结果
            System.out.println(maxValue);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

